package com.antler.smt.service.admin;

import com.antler.smt.entity.PermissionEntity;
import com.antler.smt.request.admin.AddPermissionReq;
import com.antler.smt.request.admin.GetPermissionListReq;
import com.antler.smt.request.admin.UpdatePermissionReq;
import com.antler.smt.response.admin.GetPermissionTreeResp;
import com.antler.smt.response.admin.ListPermissionResp;
import com.antler.smt.response.admin.ZtreeResp;
import com.antler.smt.response.base.Result;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * 权限接口
 *
 * @author vic
 * @date 2018-04-13 14:25
 */
public interface PermissionService {
    /**
     * 获取角色列表信息
     *
     * @param request 请求实体
     * @return 角色列表实体
     */
    Result<PageInfo<ListPermissionResp>> listPermissionInfo(GetPermissionListReq request);

    /**
     * 递归获取权限集合
     *
     * @return
     */
    Result<List<GetPermissionTreeResp>> getAllPermList();

    /**
     * 递归获取权限集合加默认选中
     *
     * @param id 角色id
     * @return
     */
    Result<List<GetPermissionTreeResp>> getAllPermListChecked(Long id);

    /**
     * 获取权限标识列表
     *
     * @return 列表
     */
    List<ListPermissionResp> listPerms();

    /**
     * 新增权限
     *
     * @param req 请求实体
     * @return Result实体
     */
    Result addPermission(AddPermissionReq req);

    /**
     * 获取权限树
     *
     * @return
     */
    Result<List<ZtreeResp>> treePerms();

    /**
     * 获取用户权限列表
     *
     * @param userId 用户id
     * @return
     */
    List<GetPermissionTreeResp> getUserPermissionList(Long userId);

    /**
     * 更新权限
     *
     * @param req 请求实体
     * @return Result实体
     */
    Result updatePermission(UpdatePermissionReq req);

    /**
     * 删除权限
     *
     * @param permissionId 权限id
     * @return Result实体
     */
    Result deletePermission(Long permissionId);

    /**
     * 获取不包含按钮的权限列表
     *
     * @return Result实体
     */
    Result<List<ZtreeResp>> queryNotButtonList();

    /**
     * 获取权限实体
     *
     * @param permissionId 权限id
     * @return 权限实体
     */
    PermissionEntity getPermissionEntity(Long permissionId);
}
